Transaktionshistorie manipulieren
Das folgende Programm demonstriert die Manipulation der OK-Code-Historie mittels ABAP. Hierfür werden Registry-Einträge auf dem Frontend manipuliert.
Kurzbeschreibung
Beim Aufruf des Programms wird die Historie aus der Registry eingelesen und direkt in der Select-Option OK_CODE angezeigt, hier können die Codes bearbeitet werden (Einfügen/Ändern/Löschen) nach dem Start und der Sicherheitsabfrage werden die neuen Werte in die Registry geschrieben, ein neuer Modus gestartet, damit die neuen Codes aktiviert werden und der aktuelle Modus beendet.
Wichtig: vor dem Zurückschreiben wird versucht die Anzahl offener Modi zu
ermitteln. Das beschränkt sich aber nur auf die Modi in einem System! Sind noch Modi in anderen Systemen offen (Produktion/Integration) müssen diese vorher
geschlossen werden, sonst wird die Historie unter Umständen aus diesen
Modi wieder überschrieben.
Getestet mit SAP R6.20(4.70), Sap-Gui 6.20/6.40
Quelltext
Bitte im Quelltext die “Slashes” durch “Backslashes” ersetzen!!!
*&———————————————————————*
*& Report Z_SET_OK_CODE_HIST *
*& FREEWARE *
*&———————————————————————*
*& (c) Edwin Leippi Software-Entwicklung *
*& Email : info@leippi.de *
*& Datum : 01.05.2005 *
*& *
*& *
*& Der Autor übernimmt keine Haftung für Schäden, *
*& die durch den Einsatz dieses Programmes entstehen können *
*&———————————————————————*
*& Beschreibung: *
*& *
*& Bearbeiten der OK-Code-History in der Registry *
*& ROOT : HKEY_CURRRENT_USER *
*& KEY :’Software/SAP/SAPGUI Front/SAP Frontend Server/Code’ *
*& VALUE: Code0,Code1,Code2,…. *
*& *
*& In das Select-option Feld OK_CODE werden alle aktuellen Werte *
*& aus der Registry übertragen und können hier bearbeitet werden *
*& Löschen/Ändern/Einfügen *
*& Nur Einzelwerte (I) sind erlaubt *
*& *
*& Diese Tabelle der neuen Werte wird mit der aktuellen abgeglichen, *
*& geänderte Einträge werden modifiziert, neue Einträge werden *
*& eingefügt und nicht mehr vorhandene Einträge werden gelöscht *
*& danach wird ein neuer Modus erzeugt und der in dem das Programm *
*& gestartet wurde beendet, um die neuen Einträge aus der Registry *
*& zu laden *
*& *
*& Achtung: *
*& es sollte alle SAP-Modi bis auf den rufenden geschlossen sein *
*&———————————————————————*
REPORT z_set_ok_code_hist MESSAGE-ID z000.
*&——————————————————————–*
*& SELECT-OPTIONS
*&——————————————————————–*
SELECT-OPTIONS ok_code FOR sy-ucomm NO INTERVALS LOWER CASE.
*&——————————————————————–*
*& TYPES
*&——————————————————————–*
TYPES: BEGIN OF t_value,
value_nr(4) TYPE n,
value_name TYPE string,
value TYPE string.
TYPES: END OF t_value.
*&——————————————————————–*
*& DATA
*&——————————————————————–*
* Tabelle der gefunden Registry Einträge
DATA it_values TYPE STANDARD TABLE OF t_value.
FIELD-SYMBOLS <fs_values> TYPE t_value.
DATA wa_values TYPE t_value.
DATA reg_value TYPE string.
DATA value TYPE string.
DATA rc TYPE i.
DATA num_char(4) TYPE c.
*&——————————————————————–*
*& INITIALIZATION
*&——————————————————————–*
INITIALIZATION.
PERFORM get_ok_code_history.
*&——————————————————————–*
*& START-OF-SELECTION
*&——————————————————————–*
START-OF-SELECTION.
* Prüfung ist dies der letzte SAP-Modus
PERFORM check_session_count CHANGING rc.
IF rc NE 0. EXIT. ENDIF.
PERFORM set_ok_code_history.
END-OF-SELECTION.
*&——————————————————————–*
*& Form close_all_sessions
*&——————————————————————–*
* Öffne neuen Modus, schliesse akttuellen
*———————————————————————*
FORM close_session.
* Neuen Modus erzeugen, dieser bekommt die neue History
CALL FUNCTION ‘TH_CREATE_MODE’.
* Warte, warte nur ein Weilchen
* ohne, gab es schon Probleme, der neue Modus wurde nicht
* erzeugt
WAIT UP TO 2 SECONDS.
* Schliesse den eigenen Modus
CALL FUNCTION ‘TH_DELETE_MODE’.
ENDFORM. “close_all_sessions
*&——————————————————————–*
*& Form check_session_number
*&——————————————————————–*
* Prüfe Anzahl offene Modi im System
*———————————————————————*
FORM check_session_count CHANGING p_rc.
DATA user_info TYPE STANDARD TABLE OF uinfo2.
DATA sess_count TYPE i.
DATA antwort.
p_rc = 0.
REFRESH user_info.
* Hole alle SAP-Modi dieses Systems
CALL FUNCTION ‘TH_LONG_USR_INFO’
TABLES
user_info = user_info.
DESCRIBE TABLE user_info LINES sess_count.
* Falls noch mehrere Modi offen nichts tun
IF sess_count > 1.
MESSAGE i000 WITH ‘Bitte bis auf diesen alle SAP-Modi schliessen’.
p_rc = 1.
EXIT.
ENDIF.
* Sicherheitsabfrage
CALL FUNCTION ‘POPUP_TO_CONFIRM’
EXPORTING
text_question =
‘Wirklich alle Ok Code Einträge überschreiben ?’
text_button_1 = ‘Ja'(001)
text_button_2 = ‘Nein'(002)
display_cancel_button = ‘ ‘
IMPORTING
answer = antwort
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
p_rc = 2.
EXIT.
ENDIF.
IF antwort NE ‘1’.
p_rc = 2.
ENDIF.
ENDFORM. “check_session_number
*&———————————————————————*
*& Form get_ok_code_history
*&———————————————————————*
* Lese Ok_Code Histrory aus der Registry
*———————————————————————-*
FORM get_ok_code_history .
num_char = ‘0’.
REFRESH it_values.
* Alle Registry Werte holen
wa_values-value_nr = 0.
DO 30 TIMES.
SHIFT num_char LEFT DELETING LEADING ‘ 0’.
IF num_char IS INITIAL. num_char = ‘0’. ENDIF.
CONCATENATE ‘Code’ num_char INTO value.
cl_gui_frontend_services=>registry_get_value(
EXPORTING
root = cl_gui_frontend_services=>hkey_current_user
key = ‘Software/SAP/SAPGUI Front/SAP Frontend Server/Code’
value = value
IMPORTING
reg_value = reg_value
EXCEPTIONS
get_regvalue_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5 ).
cl_gui_cfw=>flush( ).
IF sy-subrc <> 0. EXIT. ENDIF.
* Eintrag in Selektion
IF NOT reg_value IS INITIAL.
ok_code-low = reg_value.
ok_code-sign = ‘I’.
ok_code-option = ‘EQ’.
APPEND ok_code.
ENDIF.
* Eintrag in interne Tabelle der Werte
wa_values-value = reg_value.
wa_values-value_name = value.
APPEND wa_values TO it_values.
num_char = sy-index.
wa_values-value_nr = sy-index.
ENDDO.
SORT it_values BY value_nr.
ENDFORM. “get_ok_code_history
*&——————————————————————–*
*& Form set_ok_code_history
*&——————————————————————–*
* setze eingegebene Werte in die Registry
*———————————————————————*
FORM set_ok_code_history.
DATA indx TYPE i.
DATA indx_nr(4) TYPE n.
* Überarbeiten der OK_CODE Tabelle nur ‘I’ ‘EQ’ sind erlaubt.
LOOP AT ok_code.
* Leerer Ok-Code nicht zulassen
IF ok_code-low IS INITIAL.
DELETE ok_code.
CONTINUE.
ENDIF.
* Nur Include kein Ausschliessen
IF ok_code-sign NE ‘I’.
DELETE ok_code.
CONTINUE.
ENDIF.
* Nur Einzelwerte erlaubt
IF ok_code-option NE ‘EQ’.
DELETE ok_code.
CONTINUE.
ENDIF.
ENDLOOP.
* Jetzt noch die Ok_CODES mit der eingelesene Tabelle abgleichen
LOOP AT ok_code.
* Codes fangen mit 0 an Code0,Code1,….
indx_nr = sy-tabix – 1.
READ TABLE it_values ASSIGNING <fs_values>
WITH KEY value_nr = indx_nr.
* Keinen Eintrag gefunden -> erzeuge neuen
IF sy-subrc NE 0.
num_char = indx_nr.
SHIFT num_char LEFT DELETING LEADING ‘ 0’.
IF num_char IS INITIAL. num_char = ‘0’. ENDIF.
CONCATENATE ‘Code’ num_char INTO value.
wa_values-value_nr = indx_nr.
wa_values-value = ok_code-low.
wa_values-value_name = value.
APPEND wa_values TO it_values.
ENDIF.
ENDLOOP.
* Einträge vornehmen
LOOP AT it_values INTO wa_values.
indx = wa_values-value_nr + 1.
* Lese OK_CODE aus Select-options
READ TABLE ok_code INDEX indx.
* Falls nicht gefunden -> Lösche
IF sy-subrc NE 0.
cl_gui_frontend_services=>registry_delete_value(
EXPORTING
root = cl_gui_frontend_services=>hkey_current_user
key =
‘Software/SAP/SAPGUI Front/SAP Frontend Server/Code’
value = wa_values-value_name
IMPORTING
rc = rc
EXCEPTIONS
cntl_error = 1
registry_delete_value_failed = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5 ).
* Flush nicht vergessen
cl_gui_cfw=>flush( ).
ELSE.
* Setze neuen Code aus der Select-Option
wa_values-value = ok_code-low.
IF NOT ok_code-low IS INITIAL.
cl_gui_frontend_services=>registry_set_value(
EXPORTING
root =
cl_gui_frontend_services=>hkey_current_user
key =
‘Software/SAP/SAPGUI Front/SAP Frontend Server/Code’
value_name = wa_values-value_name
value = wa_values-value
IMPORTING
rc = rc
EXCEPTIONS
registry_error = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5 ).
ENDIF.
* Flush nicht vergessen
cl_gui_cfw=>flush( ).
ENDIF.
ENDLOOP.
* Einen neuen Modus öffnen und den eigenen beenden
PERFORM close_session.
ENDFORM. “set_ok_code_history
- Meine Eclipse-Plugins - 22. November 2024
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024